package com.budwk.app.sqfwV2.enums.centuryCitySafe;

import com.budwk.app.sqfwV2.dto.dto.centuryCity.SafeCheckTaskParamDataDTO;
import lombok.Getter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * 校外培训机构问题枚举
 */
@Getter
public enum CampusTrainingProblemsEnum {

    P_A("1","fireClearance", "是", "是否依法通过消防设计审查、消防验收和备案抽查", "该场所未依法通过消防设计审查、消防验收和备案抽查"),
    P_B("2","fireOfficer", "是", "是否明确消防安全责任人", "该场所未明确消防安全责任人"),
    P_C("3","fireSafetySystem", "是", "是否建立消防安全制度", "该场所未建立消防安全制度"),
    P_D("4","emergencyEvacuationPlan", "是", "是否制定灭火和应急疏散预案", "该场所未制定灭火和应急疏散预案"),
    P_E("5","postFireRespon", "是", "是否明确逐级和岗位消防安全责任，配备专兼职消防安全管理人员", "该场所未明确逐级和岗位消防安全责任，未配备专兼职消防安全管理人员"),
    P_F("6","personnelControlSafety", "是", "询问重点岗位人员是否掌握自身消防安全责任", "该场所重点岗位人员未掌握自身消防安全责任"),
    P_G("7","organizeInspectionWork", "是", "是否组织开展检查巡查、隐患整改、设施维护、宣传教育、疏散演练等工作", "该场所未组织开展检查巡查、隐患整改、设施维护、宣传教育、疏散演练等工作"),
    P_H("8","leaseContract", "是", "实行承包、租赁或者委托经营、管理的校外培训机构，在与产权单位签订相关租赁合同时是否依照有关规定明确各方的消防安全责任", "该场所实行承包、租赁或者委托经营、管理的校外培训机构，在与产权单位签订相关租赁合同时未依照有关规定明确各方的消防安全责任"),
    P_I("9","postAFireSafetyPledge", "是", "是否全面落实火灾隐患“自知、自查、自改”制度，在公共区域明显位置应张贴《消防安全承诺书》，向社会公开承诺，接受群众监督", "该场所未全面落实火灾隐患“ 自知、 自查、 自改 ”制度，未在公共区域明显位置应张贴《消防安全承诺书》，向社会公开承诺，接受群众监督该场所未全面落实火灾隐患“ 自知、 自查、 自改 ”制度，未在公共区域明显位置应张贴《消防安全承诺书》，向社会公开承诺，接受群众监督"),
    P_J("10","putUpFireSafetyPosters", "是", "是否按照国家标准、行业标准设置消防安全标志，在醒目位置张贴消防安全宣传图示和疏散示意图", "该场所未按照国家标准、行业标准设置消防安全标志，未在醒目位置张贴消防安全宣传图示和疏散示意图"),
    P_K("11","occupancyArea", "否", "培训场所在同一培训时段内生均培训用房建筑面积是否违规小于3平方米", "该场所培训用房建筑面积违规小于3平方米"),
    P_L("12","trainingRoomViolation", "否", "培训用房、集体宿舍是否违规设置在四层及以上楼层、地下和半地下建筑内", "该场所培训用房、集体宿舍违规设置在四层及以上楼层、地下和半地下建筑内"),
    P_M("13","perCapitaArea", "否", "每室居住人数是否违规超过6人，人均使用面积是否违规小于5平方米", "该场所每室居住人数违规超过6人，人均使用面积违规小于5平方米"),
    P_N("14","fireSeparationOfChildren", "是", "儿童活动场所是否按要求采用耐火极限不低于2. 0h的防火隔墙和不低于1. 0h的楼板以及防火门（窗）与建筑其他部位进行防火分隔", "儿童活动场所未按要求采用耐火极限不低于2. 0h的防火隔墙和不低于1. 0h的楼板以及防火门（窗）与建筑其他部位进行防火分隔"),
    P_O("15","fireKitchenDivider", "是", "使用明火的厨房是否按相关规定使用砖墙和防火门（窗）与其他部分作分隔", "该场所使用明火的厨房未按相关规定使用砖墙和防火门（窗）与其他部分作分隔"),
    P_P("16","kitchenFlammableGasAlarm", "是", "使用燃气的厨房是否按相关规定安装可燃气体浓度报警装置、燃气紧急切断装置", "该场所使用燃气的厨房未按相关规定安装可燃气体浓度报警装置、燃气紧急切断装置"),
    P_Q("17","rangeHoodCleaning", "是", "厨房油烟机应当每日清洗，油烟道是否每季度由专业公司清理一次并做好记录", "该场所厨房油烟机未每日清洗，油烟道未每季度由专业公司清理一次并做好记录"),
    P_R("18","foamSandwichColorSteelPlate", "否", "是否违规设置在泡沫夹芯彩钢板搭建的建筑内", "该场所设置在泡沫夹芯彩钢板搭建的建筑内"),
    P_S("19","flammableMaterialFinish", "否", "房间、走道、墙面、顶棚等是否违规采用泡沫、海绵、毛毯、模板、彩钢板等易燃可燃材料装饰装修", "该场所房间、走道、墙面、顶棚等违规采用泡沫、海绵、毛毯、模板、彩钢板等易燃可燃材料装饰装修"),
    P_T("20","isElecCircuitAging", "否", "是否违规使用假冒伪劣电气产品、私拉乱接电气线路，电气线路绝缘层是否老化、破损", "该场所违规使用假冒伪劣电气产品、私拉乱接电气线路，电气线路绝缘层是否老化、破损"),
    P_U("21","socketIsMountedOn", "否", "电表箱、配电箱、开关、插座是否违规安装、放置在可燃物上", "该场所电表箱、配电箱、开关、插座违规安装、放置在可燃物上"),
    P_V("22","overloadPower", "否", "是否违规超负荷用电或者改变保险装置", "该场所违规超负荷用电或者改变保险装置"),
    P_W("23","externalPowerCable", "否", "空调等大功率用电设备外部电源线是否违规采用移动式插座连接", "该场所空调等大功率用电设备外部电源线是否违规采用移动式插座连接"),
    P_Y("24","electricAppliance", "否", "是否违规使用电烤炉、红外辐射取暖器、电热毯等电热器具", "该场所违规使用电烤炉、红外辐射取暖器、电热毯等电热器具"),
    P_Z("25","fireApprovalSystem", "是", "是否建立并落实动火审批制度", "该场所未建立并落实动火审批制度"),
    P_26("26","isThereWeldingOperation", "否", "培训时段内，是否违规进行动火动焊作业", "该场所培训时段内，违规进行动火动焊作业"),
    P_27("27","weldControlMeasure", "是", "其他时段进行电焊、气焊、切割等明火作业时，是否办理动火审批手续并落实安全管控措施", "该场所进行电焊、气焊、切割等明火作业时，未办理动火审批手续并落实安全管控措施"),
    P_28("28","safetyExitQuantity", "否", "安全出口（疏散楼梯）数量是否违规少于2个", "该场所安全出口（疏散楼梯）数量少于2个"),
    P_29("29","separateFireExits", "是", "设置在高层建筑内时是否有独立的安全出口（疏散楼梯）", "该场所未有独立的安全出口（疏散楼梯）"),
    P_30("30","isThereAnyBlockage", "是", "安全出口是否畅通", "安全出口堵塞"),
    P_31("31","useSlidingDoors", "否", "是否违规使用转门、卷帘门、推拉门、折叠门和设置金属栅栏", "该场所违规使用转门、卷帘门、推拉门、折叠门和设置金属栅栏"),
    P_32("32","isAreObstaclesEscape", "否", "是否有影响逃生的障碍物", "有影响逃生的障碍物"),
    P_33("33","safetyDoorOpeningDirection", "否", "安全疏散门是否未按相关规定向疏散方向开启", "该场所安全疏散门未按相关规定向疏散方向开启"),
    P_34("34","areEmergencyRoutes", "是", "逃生通道应急照明灯、安全出口指示灯是否完好", "应急照明灯、指示灯损坏"),
    P_35("35","equippedEmergFlash", "否", "每间培训室、集体宿舍是否未按要求配备不少于2个应急手电，及与培训学员人数相当的过滤式消防自救呼吸器", "该场所每间培训室、集体宿舍未按要求配备不少于2个应急手电，及与培训学员人数相当的过滤式消防自救呼吸器"),
    P_36("36","parkYourEBikeOrChargeIt", "否", "是否违规在培训场所内及公共门厅、疏散走道、楼梯间、安全出口处停放电动自行车或充电", "该场所违规在培训场所内及公共门厅、疏散走道、楼梯间、安全出口处停放电动自行车或充电"),
    P_37("37","smokingInPlace", "否", "是否违规在培训场所内吸烟，使用明火取暖、照明、驱蚊", "该场所违规在培训场所内吸烟，使用明火取暖、照明、驱蚊"),
    P_38("38","isCombustiblEexplosive", "否", "是否违规存放、使用易燃易爆危险品", "该场所违规存放、使用易燃易爆危险品"),
    P_39("39","organizeFireInspection", "是", "是否在每月及寒暑假、新班开课前至少组织1次防火检查", "该场所未每月及寒暑假、新班开课前至少组织1次防火检查"),
    P_40("40","firePatrol", "是", "是否在培训期间至少明确1名人员全程在岗值守，每2小时开展不少于1次的防火巡查", "该场所未在培训期间至少明确1名人员全程在岗值守，每2小时开展不少于1次的防火巡查"),
    P_41("41","fireControlRoom", "是", "设有消防控制室是否落实24小时专人值班，且每班不少于2人", "该场所消防控制室未落实24小时专人值班，且每班不少于2人"),
    P_42("42","nightPatrol", "是", "设有集体宿舍的，是否在夜间开展巡查且每2小时不少于1次", "该场所未在夜间开展巡查且每2小时不少于1次"),
    P_43("43","fireFightingDrill", "是", "每季度是否组织全体工作人员开展不少于1次初起火灾扑救和疏散逃生演练", "该场所每季度未组织全体工作人员开展不少于1次初起火灾扑救和疏散逃生演练"),
    P_44("44","fireSafetyTraining", "是", "每半年或新班开课前是否组织对学生至少开展1次消防安全培训和应急疏散演练", "该场所未每半年或新班开课前组织对学生至少开展1次消防安全培训和应急疏散演练"),
    P_45("45","fireFightingEffective", "是", "检查消防设施器材是否保持完好有效", "该场所消防设施器材未保持完好有效"),
    P_46("46","fireExitsEscapes", "否", "是否违规擅自停用、关闭、遮挡消防设施设备，埋压、圈占消火栓，破坏防火分隔，锁闭、堵塞、占用安全出口和消防通道", "该场所违规擅自停用、关闭、遮挡消防设施设备，埋压、圈占消火栓，破坏防火分隔，锁闭、堵塞、占用安全出口和消防通道"),
    P_47("47","fireEquipeLabels", "是", "是否严格按标准配置灭火器等消防设施器材，并在消防设施器材上设置醒目的标识，标明使用方法", "该场所未严格按标准配置灭火器等消防设施器材，并在消防设施器材上设置醒目的标识，标明使用方法"),
    P_48("48","independentSmokeAlarm", "是", "场所内未设置自动消防设施的，是否按要求设置具有集中平台或移动终端报警功能的独立式感烟火灾探测报警器", "该场所未按要求设置具有集中平台或移动终端报警功能的独立式感烟火灾探测报警器"),
    P_49("49","fireMaintenance", "是", "建筑消防设施、器材是否委托具有相应资质的消防技术服务机构进行定期维护保养，每年是否至少进行1次全面检测", "该场所建筑消防设施、器材未具有相应资质的消防技术服务机构进行定期维护保养，每年未至少进行1次全面检测");

    private final String riskCode;

    private final String fields;

    private final String defaultValue;

    private final String riskDesc;

    private final String harardDesc;

    CampusTrainingProblemsEnum(String riskCode, String fields, String defaultValue, String riskDesc, String harardDesc) {
        this.riskCode = riskCode;
        this.fields = fields;
        this.defaultValue = defaultValue;
        this.riskDesc = riskDesc;
        this.harardDesc = harardDesc;
    }

    public static CampusTrainingProblemsEnum getEnumByFields(String fields) {
        Optional<CampusTrainingProblemsEnum> optional = Arrays.stream(values()).filter(e -> e.getFields().equals(fields)).findFirst();
        return optional.orElse(null);
    }

    /**
     * 获取问题的默认值
     * @return
     */
    public static List<SafeCheckTaskParamDataDTO> getDefaultValues() {
        List<SafeCheckTaskParamDataDTO> list = new ArrayList<>();
        for (CampusTrainingProblemsEnum e : values()) {
            SafeCheckTaskParamDataDTO safe = new SafeCheckTaskParamDataDTO();
            safe.setKey(e.getDefaultValue()).setFields(e.getFields()).setRiskCode(e.getRiskCode()).setRiskDesc(e.getRiskDesc());
            list.add(safe);
        }
        return list;
    }
}
